package estrategiasRecomendadorAmistad;

import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;

import dataTransferObject.Mascota;
import dataTransferObject.Usuario;

public abstract class EstrategiaEdadMascotas extends
		EstrategiaMascotasCompatibles { 
	
	public Double filtroEdadMascota(Mascota mascotaAmigo,
			Mascota mascotaUsuario, Double picoDePrioridad) {
		Double puntos = 0.0;
		
		Double difEdad = diferenciaDeEdadEnAnyos(mascotaAmigo.getFecha_nacimiento(), mascotaUsuario.getFecha_nacimiento());
		if(difEdad <= picoDePrioridad){
			puntos = (10.0/picoDePrioridad) * 0.1;
			difEdad = picoDePrioridad - difEdad;
			puntos += (difEdad/(picoDePrioridad/10)) * 0.1;
			
			
			
			
		}
		
		return puntos;
		
	}
	
	public Double calcularAfinidad(Usuario posibleAmigo, Usuario usuario){
		Map<Mascota,Mascota> mascotas = super.mascotasAComparar(posibleAmigo, usuario);
		Double puntos = 0.0;
		
		for(Entry<Mascota, Mascota> parMascotas : mascotas.entrySet()){
			puntos += calcularAfinidadMascotas(parMascotas.getKey(), parMascotas.getValue());	
		}
		
		return puntos;
	}
	

	private Double diferenciaDeEdadEnAnyos(Date mascota1, Date mascota2){
		return (double) Math.abs((mascota1.getTime()-mascota2.getTime())/31536000000L);
	}

	public abstract Double calcularAfinidadMascotas(Mascota usuario, Mascota posibleAmigo);


}
